package org.example.local;


import org.example.local.event.Event;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

//用于通知 不含消息  相当于把消息生成方和接收方 解耦了     是总线/事件发布器 专门用于发消息
public class TVStation {

    List<EventListener> eventListeners=new ArrayList<>();

    //维护不同类型的事件的监听器
    Map<Class<? extends Event>,List<EventListener>> eventListenersMap=new HashMap<>();

    //订阅
    public void subscribe(EventListener eventListener,Class<? extends Event> eventClass){
        eventListenersMap.computeIfAbsent(eventClass,k->new ArrayList<>()).add(eventListener);
    }


    //发布事件 给所有订阅了的(在这条线上的)发送即可
    public void publish(Event event){
        //先找到对应的监听器list
        List<EventListener> eventListeners = eventListenersMap.get(event.getClass());
        if(eventListeners!=null) {
            eventListeners.forEach(eventListener -> eventListener.onEvent(event));
        }

    }



}
